import platform
from typing import Optional


# 当前根据系统配置获取不同操作系统的路径
class CrossPlatformPath:
    """
    支持跨平台路径管理的类，根据操作系统自动选择合适的路径
    """

    def __init__(self, mac_path: Optional[str] = None, windows_path: Optional[str] = None,
                 default_path: Optional[str] = None):
        """
        初始化跨平台路径管理器
        
        Args:
            mac_path: macOS系统下的路径
            windows_path: Windows系统下的路径
            default_path: 默认路径（当对应系统路径未设置时使用）
        """
        self.mac_path = mac_path
        self.windows_path = windows_path
        self.default_path = default_path
        self.current_os = platform.system()

    def get_path(self) -> str:
        """
        根据当前操作系统获取对应的路径
        
        Returns:
            str: 对应操作系统的路径
            
        Raises:
            ValueError: 当没有为当前操作系统设置路径且没有默认路径时抛出异常
        """
        if self.current_os == "Darwin" and self.mac_path:
            return self.mac_path
        elif self.current_os == "Windows" and self.windows_path:
            return self.windows_path
        elif self.default_path:
            return self.default_path
        else:
            raise ValueError(f"No path configured for OS: {self.current_os}")

    def set_path(self, mac_path: Optional[str] = None, windows_path: Optional[str] = None,
                 default_path: Optional[str] = None):
        """
        设置不同操作系统的路径
        
        Args:
            mac_path: macOS系统下的路径
            windows_path: Windows系统下的路径
            default_path: 默认路径
        """
        if mac_path is not None:
            self.mac_path = mac_path
        if windows_path is not None:
            self.windows_path = windows_path
        if default_path is not None:
            self.default_path = default_path

    @property
    def os_type(self) -> str:
        """
        获取当前操作系统类型
        
        Returns:
            str: 操作系统类型 ("Darwin", "Windows", 或其他)
        """
        return self.current_os

    @classmethod
    def default_path(cls):
        """
        获取一个默认的测试路径

        Returns:
            CrossPlatformPath: 返回配置了默认路径的CrossPlatformPath实例
        """
        return cls(  # 使用cls而不是硬编码类名是更好的做法
            mac_path="/Applications/0ENZO/WorkSpace/Python/20250731_1_GitPython_manual",
            windows_path="D:\\TT_WORK+\\PycharmTestSpace\\GItPython1",
            default_path="./repo"
        )

    # 如果你想返回当前对象本身，可以使用以下方法：
    def self(self):
        """
        返回对象本身

        Returns:
            CrossPlatformPath: 返回当前实例
        """
        return self

    def __repr__(self):
        """
        返回对象的字符串表示
        """
        return f"CrossPlatformPath(mac_path='{self.mac_path}', windows_path='{self.windows_path}', default_path='{self.default_path}')"


# 使用示例
if __name__ == "__main__":
    print(f"")
    # 示例1: 初始化时设置路径
    path_manager = CrossPlatformPath(
        mac_path="/Applications/0ENZO/WorkSpace/Python/20250731_1_GitPython_manual",
        windows_path="D:\\TT_WORK+\\PycharmTestSpace\\GItPython1",
        default_path="./repo"
    )
    print(f"[案例1]当前操作系统: {path_manager.os_type}")
    print(f"[案例1]选择的路径: {path_manager.get_path()}")

    # 示例2: 动态设置路径
    path_manager2 = CrossPlatformPath()
    path_manager2.set_path(
        mac_path="/Users/username/projects/myrepo",
        windows_path="D:\\Projects\\myrepo"
    )
    print(f"[案例2]动态设置路径（注意没有设置以前打印会报错）: {path_manager2.get_path()}")

    # 示例3: 默认路径
    path_manager3 = CrossPlatformPath.default_path()
    print(f"[案例3]默认路径打印: {path_manager3.get_path()}")
